//
//  HomeCell.swift
//  新浪微博项目
//
//  Created by 王炯 on 16/7/23.
//  Copyright © 2016年 王炯. All rights reserved.
//

import UIKit
import SnapKit

class HomeCell: UITableViewCell
{
    
    //懒加载三个View视图
    //(1)原创微博视图
     private lazy var originalView:WeiBoOriginalView = WeiBoOriginalView()
    
    //(2)转发微博视图
    private lazy var retwteetView:RetweetView = RetweetView()
    
    //(3)底部视图
    private lazy var bottomView:BottomView = BottomView()
    
    
    //底部视图的顶部约束根据数据有没有转发信息来重新规划！！！，提取出来当做一个属性来处理
    //记住一定要导入SnapKit框架!!!
    var bottomViewTopConstraint:Constraint?
    

    //必须只能重写UITableViewCell的init(style: UITableViewCellStyle, reuseIdentifier: String?)方法!!!
    override init(style: UITableViewCellStyle, reuseIdentifier: String?)
    {
          super.init(style: style, reuseIdentifier: reuseIdentifier)
        
          //设置新界面视图
         setUpUI()
    }
    
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    
    //设置新界面视图
   func setUpUI()
   {
        //设置cell的整体颜色(灰色)
        backgroundColor = RGB(237, green: 237, blue: 237)
    
       //添加原创微博视图到cell上
       contentView.addSubview(originalView)
       //添加底部视图到cell上
       contentView.addSubview(bottomView)
       //转发微博视图添加到cell上
       contentView.addSubview(retwteetView)
    
    
    
       //设置约束
    //原创视图的约束设置与转发视图的约束设置思路相同，都是在其内部根据文本的多少来重新设置其约束
    
    
    originalView.snp_makeConstraints { (make) -> Void in
        make.leading.trailing.equalTo(contentView)
        //设置距离contentView顶部一定的距离
        make.top.equalTo(contentView).offset(8)
        
        //在原创微博view的内部已经设置其最终的约束之后，此时在cell中设置的约束可以不需要了
        //make.height.equalTo(100)
        
    }
    
    //设置微博转发视图的约束(初始时添加转发视图到上面)
    retwteetView.snp_makeConstraints { (make) in
        
        make.leading.trailing.equalTo(contentView)
        make.top.equalTo(originalView.snp_bottom).offset(5)
        
        //在原创微博view的内部已经设置其最终的约束之后，此时在cell中设置的约束可以不需要了
        //make.height.equalTo(100)
    }
    
    
    
    
       //设置底部视图的约束
       bottomView.snp_makeConstraints { (make) in
        
        //取当前bottomView的顶部约束赋值给bottomViewTopConstraint属性(传引用)
        //默认顶部的约束是一转发视图的地步来设置
        self.bottomViewTopConstraint = make.top.equalTo(retwteetView.snp_bottom).constraint
        
        
        make.bottom.leading.trailing.equalTo(contentView)
        
        //通过设置底部视图的高度来进而设置整个cell的约束，最终通过设置整个cell的约束来设置整个cell的高度
        make.height.equalTo(35)
        
    }
    
    
        //重新设置整个cell的约束
        contentView.snp_makeConstraints { (make) in
            //顶部,左边，右边的约束不变
            make.top.leading.trailing.equalTo(self)
            //底部的约束 == 底部视图的底部约束
            make.bottom.equalTo(bottomView.snp_bottom)
    }
    
    
    
    
   }
    
    
    
    
    
    //从外界获取CellViewModel数据来设置cell的上控件的一些属性
    //此时获取到的viewModel数据是通过CellViewModel类对获取的网络数据dataModel进行数据处理好的数据
    var viewModel:CellViewModel?{
        
        //当viewModel的值改变时调用
        didSet
        {
            //viewModel做数据处理给cell上的控件设置属性
            //给原创微博的viewModel属性赋值
            self.originalView.viewModel = viewModel
            
            
            //给转发微博视图的viewModel属性赋值
            self.retwteetView.viewModel = viewModel
            
            //给底部视图的viewModel属性赋值
            self.bottomView.viewModel = viewModel
            
            
            
            guard let modeldata = viewModel?.dataModel else
            {
                return
            }
            
            //通过判断当前的数据里面有没有转发信息来重新设置cell的界面布局
            /*
             - 首先要先卸载底部视图的顶部约束
             - 如果retweeted_status == nil 代表没有转发微博
             - 底部视图的top ==  原创微博的bottom
             - 隐藏转发微博
             - 反之 就是有转发微博
             - 给转发微博的ViewModel 赋值
             - 底部视图的top ==  转发微博的bottom
             - 显示转发微博
             */
            //(1)首先要先卸载掉底部视图的顶部约束(必须要卸载旧的约束！！)
            self.bottomViewTopConstraint?.uninstall()

            
            if modeldata.retweeted_status == nil
            {
                //print("当前的cell没有转发信息")
                //(2)设置底部视图的顶部约束为原创视图的底部
                //用snp_makeConstraints或snp_updateConstraints都可以
                bottomView.snp_makeConstraints(closure: { (make) in
                   self.bottomViewTopConstraint = make.top.equalTo(originalView.snp_bottom).constraint
                })
                //(3)隐藏掉转发视图
                self.retwteetView.hidden = true
            }
            else
            {
                //print("当前的cell有转发信息")
                //(2)设置底部视图的顶部约束为zhua视图的底部
                bottomView.snp_makeConstraints(closure: { (make) in
                    self.bottomViewTopConstraint = make.top.equalTo(retwteetView.snp_bottom).constraint
                })
                //(3)显示掉转发视图
                self.retwteetView.hidden = false
                
            }
            
        }
        
    }
    
    
    
}
